// 封装购物车模块
import {defineStore} from "pinia";
import {ref} from 'vue'
import {ElMessage} from "element-plus";
import {computed} from "vue";
import {useUserStore} from "@/stores/user.js";
import {insertCartAPI,findNewCartListAPI,delCartAPI} from "@/apis/cart.js";

export const useCartStore=defineStore('cart',()=>{
    // 判断登录状态（从userStore中获取token）
    const userStore=useUserStore()
    const isLogin=computed(()=>userStore.userInfo.token)
    // 定义购物车列表
    const cartList=ref([])

    // 定义添加购物车逻辑
    const addCart=async (goods)=>{
        const {skuId,count}=goods
        if(isLogin.value){
            console.log("使用远程购物车")
            // 登录状态，放入服务器购物车
            await insertCartAPI({skuId,count})
            // const res=await findNewCartListAPI()
            // cartList.value=res.result
            updateCart()
        }else{
            console.log("使用本地购物车")
            // 已经添加过-counter+1
            // 没有添加过-直接push
            // 思路：通过匹配传递过来的商品对象中的skuId能不能再cartList中找到，找到了就是添加过的
            const item = cartList.value.find((item) => goods.skuId === item.skuId)
            if(item){
                // 找到了相同的商品
                item.count++
            }else{
                cartList.value.push(goods)
            }
            ElMessage({
                type:"success",
                message:"添加购物车成功"
            })
        }

    }
    // 删除购物车
    const delCart=async (skuId)=>{
        if(isLogin.value){
            console.log("删除远程购物车")
            const deleteRes=await delCartAPI([skuId])
            console.log("deleteRes",deleteRes)
            // const res=await findNewCartListAPI()
            // cartList.value=res.result
            updateCart()
        }else{
            console.log("删除本地购物车")
            const index=cartList.value.findIndex((item)=>skuId===item.skuId)
            cartList.value.splice(index,1)
        }

    }
    // 更新购物车
    const updateCart=async ()=>{
        const res=await findNewCartListAPI()
        cartList.value=res.result
    }
    // 清除购物车
    const clearCart=()=>{
        cartList.value=[]
    }

    // 单选功能
    const singleCheck=async (skuId,selected)=>{
        const item=cartList.value.find((item)=>item.skuId===skuId)
        item.selected=selected
    }

    // 是否全选
    const isAll=computed(()=>cartList.value.every((item)=>item.selected))

    // 全选功能
    const allCheck=(selected)=>{
        cartList.value.forEach(item=>item.selected=selected)
    }

    // 已选择数量
    const selectedCount=computed(()=>cartList.value.filter(item=>item.selected).reduce((a,c)=>a+c.count,0))
    // 已选择商品合计
    const selectedPrice=computed(()=>cartList.value.filter(item=>item.selected).reduce((a,c)=>a+c.count*c.price,0))


    return {
        cartList,
        addCart,
        delCart,
        singleCheck,
        isAll,
        allCheck,
        selectedCount,
        selectedPrice,
        updateCart,
        clearCart
    }

},{
    persist:true//开启持久化pinia存储
})
